
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using Gman.Entity.Entities;
using Gman.Entity.Interfaces;
using Gman.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;


namespace Gman.Data
{
  //-------------------------------------------------------------------
  //Archivo     : UbigeoDA.cs
  //Proyecto    : Gman
  //Creacion    : BIS(NombreDesarrollador) 20130226
  //Modificacion: 
  //Descripcion : Clase para capa de datos.
  //-------------------------------------------------------------------
  public class UbigeoDA : IUbigeo
  {

  Database db = DatabaseFactory.CreateDatabase();

  //-----------------------------------------------------------------------------------------------
  //Nombre: Listar
  //Objetivo: Retorna una lista de registros de tipo UbigeoBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public IList<UbigeoBE> Listar(UbigeoBE oItem)
  {
    IList<UbigeoBE> lista = new List<UbigeoBE>();			
    try
    {				
      DbCommand cmd = db.GetStoredProcCommand("SP_ListarUbigeo");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        lista = MakeUniqueDatos(oR);
      }
      
    }catch (Exception ex){
      throw new Exception("UbigeoDA.Listar()", ex);
    }
    finally
    {
    }
    return lista;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Obtener
  //Objetivo: Retorna un objeto de Tipo UbigeoBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public UbigeoBE Obtener(UbigeoBE oItem)
  {
    UbigeoBE itemResult = null;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ObtenerUbigeo",oItem.CodUbigeo,oItem.CodPais,"");

      using (IDataReader oR = db.ExecuteReader(cmd))
      {
        while (oR.Read())
        {
          itemResult = MakeDatosMapeados(oR);
        }
      }
      return itemResult;
    }
    catch (Exception ex)
    {
      throw new Exception("UbigeoDA.Obtener()", ex);                  
    }
    finally
    {
    }
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Registrar
  //Objetivo: Almacena el registro de un objeto de tipo UbigeoBE  
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //----------------------------------------------------------------------------------------------
  public int Registrar(UbigeoBE oItem)
  { 
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_RegistrarUbigeo");						
      db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);
      db.AddInParameter(cmd, "@CodPais", DbType.Int64 , oItem.CodPais);
      db.AddInParameter(cmd, "@CodDpto", DbType.String, oItem.CodDpto);
      db.AddInParameter(cmd, "@CodProv", DbType.String, oItem.CodProv);
      db.AddInParameter(cmd, "@CodDist", DbType.String, oItem.CodDist);
      db.AddInParameter(cmd, "@DescUbigeo", DbType.String, oItem.DescUbigeo);
      db.AddInParameter(cmd, "@EstadoUbigeo", DbType.String, oItem.EstadoUbigeo);
      
      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("UbigeoDA.Registrar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Actualizar
  //Objetivo: Actualiza el registro de un objeto de tipo UbigeoBE 
  //Creacion    : TISI(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Actualizar(UbigeoBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_ActualizarUbigeo");						
      db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);
      db.AddInParameter(cmd, "@CodPais", DbType.Int64 , oItem.CodPais);
      db.AddInParameter(cmd, "@CodDpto", DbType.String, oItem.CodDpto);
      db.AddInParameter(cmd, "@CodProv", DbType.String, oItem.CodProv);
      db.AddInParameter(cmd, "@CodDist", DbType.String, oItem.CodDist);
      db.AddInParameter(cmd, "@DescUbigeo", DbType.String, oItem.DescUbigeo);
      db.AddInParameter(cmd, "@EstadoUbigeo", DbType.String, oItem.EstadoUbigeo);
      
      resultado = db.ExecuteNonQuery(cmd);

    }
    catch (Exception ex)
    {
      throw new Exception("UbigeoDA.Actualizar()", ex);
    }
    finally
    {

    }
    return resultado;
  }

  //-----------------------------------------------------------------------------------------------
  //Nombre: Eliminar
  //Objetivo: Elimina el registro de un objeto de tipo UbigeoBE  
  //Creacion    : BIS(NombreDesarrollador) 20130226  
  //-----------------------------------------------------------------------------------------------
  public int Eliminar(UbigeoBE oItem)
  {
    int resultado = 0;
    try
    {
      DbCommand cmd = db.GetStoredProcCommand("SP_EliminarUbigeo");						
      db.AddInParameter(cmd, "@CodUbigeo", DbType.String, oItem.CodUbigeo);
      db.AddInParameter(cmd, "@CodPais", DbType.Int64 , oItem.CodPais);
      

      resultado = db.ExecuteNonQuery(cmd);      

    }
    catch (Exception ex)
    {
      throw new Exception("UbigeoDA.Eliminar()", ex);
  }
  finally
  {

  }
  return resultado;
  }  

  private IList<UbigeoBE> MakeUniqueDatos(IDataReader oR)
  {
    IList<UbigeoBE> list = new List<UbigeoBE>();

    while (oR.Read())
      list.Add(MakeDatosMapeados(oR));

    return list;
  }

  private UbigeoBE MakeDatosMapeados(IDataReader oR)
  {
    var itemResult = new UbigeoBE();
    
      itemResult.CodUbigeo= oR["CodUbigeo"].ToString();
      itemResult.CodPais= oR["CodPais"].ToInt64();
      itemResult.CodDpto= oR["CodDpto"].ToString();
      itemResult.CodProv= oR["CodProv"].ToString();
      itemResult.CodDist= oR["CodDist"].ToString();
      itemResult.DescUbigeo= oR["DescUbigeo"].ToString();
      itemResult.EstadoUbigeo= oR["EstadoUbigeo"].ToString();
  
    return itemResult;
  }



  public IList<UbigeoBE> ListarUbugeo(UbigeoBE oItem, int state)
  {
      IList<UbigeoBE> lista = new List<UbigeoBE>();
      try
      {
          DbCommand cmd = db.GetStoredProcCommand("SP_ListarUbigeo");
          db.AddInParameter(cmd, "@CodProv", DbType.String, oItem.CodProv);
          db.AddInParameter(cmd, "@CodDpto", DbType.String, oItem.CodDpto);
          db.AddInParameter(cmd, "@Stado", DbType.String, state);

          using (IDataReader oR = db.ExecuteReader(cmd))
          {
              lista = MakeUniqueDatos(oR);
          }

      }
      catch (Exception ex)
      {
          throw new Exception("UbigeoDA.Listar()", ex);
      }
      finally
      {
      }
      return lista;
  }
  
  
  



 }
}
